set -g __git_auto_fetch_interval 300

function __git_fetch_all --description '进入 Git 仓库时自动 fetch'

    if not git rev-parse --is-inside-work-tree 1>/dev/null 2>&1
        return
    end

    set gitdir (git rev-parse --git-dir)

    # 如果 NO_AUTO_FETCH 文件存在，则跳过
    if test -e "$gitdir/NO_AUTO_FETCH"
        return
    end

    # 取 FETCH_LOG 修改时间（秒）
    set lastrun 0
    if test -e "$gitdir/FETCH_LOG"
        set lastrun (date -r "$gitdir/FETCH_LOG" +%s)
    end

    # 计算时间间隔，未达到则跳过
    set now (date +%s)
    if test (math "$now - $lastrun") -lt $__git_auto_fetch_interval
        return
    end

    # 记录本次 fetch 时间
    date -R >"$gitdir/FETCH_LOG"

    # 后台 fetch
    env GIT_SSH_COMMAND="ssh -o BatchMode=yes" GIT_TERMINAL_PROMPT=0 git fetch --all --recurse-submodules=yes >>"$gitdir/FETCH_LOG" 2>&1 &
end

function git_auto_fetch --on-event fish_prompt
    __git_fetch_all
end
